このファイル: /home/web6047/www/cgi-bin/prj/20180707-SVC(Side View Character)/techtree/[E] batch/javascript - snap 20180715.html
1
<!DOCTYPE html>
2
<head>
3
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
4
<title>batch</title>
5
<script>
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
console.clear();
21
console.log( "=============== script ==============" );
22
function $( id ) { return document.getElementById( id ); }
23
var HereDocument = /\/\*\s*([^]*?)\s*\*\//;
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function onloadx() {
45
46
var blocktext = test.toString().match( /\{([\s\S]*)\}/ )[ 1 ];
47
instruction1 = new Instruction( null, null, null, blocktext, null, 0, 0 );
48
49
50
var blocktext = test2.toString().match( /\{([\s\S]*)\}/ )[ 1 ];
51
instruction2 = new Instruction( null, null, null, blocktext, null, 0, 0 );
52
53
54
console.log( "-------------------------" );
55
56
a = 1;
57
b = 5;
58
59
instruction1.exec();
60
instruction2.exec();
61
}
62
function debugprint_recursive( object, indent ) {
63
64
if( indent == null ) indent = "";
65
66
console.log( object.tp, "DEC[" + object.declaration + "]\tINST[" + object.instruction + "]\tARG[" + object.argtext + "]" );
67
for( var i = 0; i < object.children.length; i++ ) {
68
indent += "\t";
69
debugprint_recursive( object.children[ i ], indent );
70
indent = indent.substr( 0, indent.length - 1 );
71
}
72
}
73
74
75
76
77
function Instruction( declaration, instruction, argtext, blocktext, comment, level, tp ) {
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
this.level = level;
100
this.declaration = declaration;
101
this.instruction = instruction;
102
this.argtext = argtext;
103
this.blocktext = blocktext;
104
this.comment = comment;
105
this.children = new Array();
106
107
this.isAvailable = true;
108
109
110
if( blocktext != null ) this.analyze( blocktext );
111
112
this.tp = tp;
113
114
this.childSeek = 0;
115
}
116
Instruction.prototype.exec = function() {
117
var envs = new Array();
118
var env = {
119
object : this,
120
counter : 0,
121
next : null,
122
parentEnv : null,
123
intoBlk : true,
124
};
125
126
owner = this;
127
128
var func = function() {
129
130
131
loop1: while( 1 ) {
132
133
if( ! env.object.commentProcessed && env.object.comment && env.object.comment.match( /anm(\d+)/ ) ) {
134
env.object.commentProcessed = true;
135
var ms = Number( RegExp.$1 );
136
setTimeout( func, ms );
137
break loop1;
138
}
139
env.object.commentProcessed = false;
140
141
142
switch( env.object.instruction ) {
143
144
case "if":
145
env.intoBlk = eval( env.object.argtext );
146
147
if( env.next && env.next.instruction == "else" ) {
148
env.next.elseCancel = env.intoBlk;
149
}
150
break;
151
case "else":
152
break;
153
154
case "for":
155
if( typeof env.forInit === "undefined" ) {
156
if( env.object.argtext.match( /(.*);(.*);(.*)/ ) ) {
157
env.forInit = RegExp.$1;
158
env.forCond = RegExp.$2;
159
env.forAdd = RegExp.$3;
160
} else {
161
console.log( "syntax erro on for: " + env.object.argtext );
162
}
163
env.forInit = env.forInit.replace( /var\s+/, "env." );
164
eval( env.forInit );
165
} else {
166
with( env ) eval( env.forAdd );
167
}
168
with( env ) env.intoBlk = eval( env.forCond );
169
break;
170
171
default:
172
var script = "";
173
if( env.object.declaration == "function" ) {
174
script += "env.parentEnv.";
175
script += env.object.instruction + " = function( ";
176
script += env.object.argtext + " ) { ";
177
script += env.object.blocktext + " }";
178
env.intoBlk = false;
179
} else if( env.object.declaration == "var" ) {
180
script += "env.";
181
script += env.object.instruction;
182
env.intoBlk = false;
183
} else if( env.object.instruction != null ) {
184
script += env.object.instruction;
185
if( env.object.argtext != null ) script += "(" + env.object.argtext + ")";
186
if( env.object.blocktext != null ) script += "{" + env.object.blocktext + "}";
187
} else {
188
189
break;
190
}
191
192
193
var allWith = "";
194
for( var j = 1; j < envs.length - 1; j++ ) {
195
allWith += "with( envs[ " + j + " ] ) ";
196
}
197
if( env.parentEnv ) allWith += "with( env.parentEnv ) ";
198
199
eval( allWith + script );
200
}
201
202
203
while( env.object.elseCancel || ! env.intoBlk || env.counter == env.object.children.length ) {
204
205
if( envs.length == 0 ) break loop1;
206
207
if( env.object.instruction == "for" && env.intoBlk ) {
208
env.counter = 0;
209
continue loop1;
210
}
211
212
env = envs.pop();
213
}
214
215
216
envs.push( env );
217
env = {
218
object : env.object.children[ env.counter++ ],
219
next : env.object.children[ env.counter ],
220
counter : 0,
221
intoBlk : true,
222
parentEnv : env,
223
}
224
225
}
226
227
};
228
229
230
func();
231
232
};
233
Instruction.prototype.analyze = function( text ) {
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
text = text.replace( /^\t+/mg, " " );
250
text = text.replace( /\n/g, ";" );
251
252
253
254
255
var res = escapeBrackets( text, "{", "}", "_block_#_;", true );
256
var blocks = res.contents;
257
258
var res = escapeBrackets( res.text, "(", ")", "_kakko_#_" );
259
var kakkos = res.contents;
260
261
var text2 = res.text;
262
text2 = text2.replace( /;\s+/mg, ";" );
263
text2 = text2.replace( /^\s+/gm, "" );
264
265
266
267
var lines = text2.split( /;/ );
268
for( var i = 0; i < lines.length; i++ ) {
269
var line = lines[ i ];
270
271
if( line.match( /^\s*$/ ) ) continue;
272
273
274
var declaration = null;
275
var instruction = null;
276
var argtext = null;
277
var blocktext = null;
278
var comment = null;
279
280
var tp;
281
282
283
if( line.match( /\/\// ) ) {
284
line = RegExp.leftContext;
285
comment = RegExp.rightContext;
286
comment = comment.replace( /^\s+|\s+$/g, "" );
287
}
288
289
290
if( line.match( /(var\s+|)(.+=.+)/ ) ) {
291
292
tp = 4;
293
declaration = RegExp.$1;
294
instruction = RegExp.$2;
295
296
} else if( line.match( /(var\s+)(.+)/ ) ) {
297
298
tp = 1;
299
declaration = RegExp.$1;
300
instruction = RegExp.$2;
301
302
} else if( line.match( /(function\s+|)(.+)\((.*)\)(.+)/ ) ) {
303
304
tp = 2;
305
declaration = RegExp.$1;
306
instruction = RegExp.$2;
307
argtext = RegExp.$3;
308
blocktext = RegExp.$4;
309
310
} else if( line.match( /(.+)\((.*)\)/ ) ) {
311
312
tp = 2;
313
instruction = RegExp.$1;
314
argtext = RegExp.$2;
315
316
} else if( line.match( /(.*)\s(.*)/ ) ) {
317
318
tp = 3;
319
instruction = RegExp.$1;
320
blocktext = RegExp.$2;
321
} else if( comment != null ) {
322
323
tp = 5;
324
325
} else {
326
327
console.log( "syntax error: " + ": [" + line + "]" );
328
continue;
329
330
}
331
332
333
334
if( argtext != null && argtext.match( /_kakko_(\d+)_/ ) ) {
335
argtext = kakkos[ RegExp.$1 ];
336
}
337
338
if( blocktext != null ) {
339
340
341
while( blocktext.match( /_kakko_(\d+)_/ ) ) {
342
blocktext = RegExp.leftContext + kakkos[ RegExp.$1 ] + RegExp.rightContext;
343
}
344
345
if( blocktext.match( /_block_(\d+)_/ ) ) {
346
blocktext = blocks[ RegExp.$1 ];
347
}
348
}
349
350
351
if( declaration != null ) declaration = declaration.replace( /^\s+|\s+$/, "" );
352
353
354
this.children.push( new Instruction( declaration, instruction, argtext, blocktext, comment, this.level + 1, tp ) );
355
356
}
357
}
358
function escapeBrackets( text, startBracket, endBracket, identifier, swDelBracket ) {
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
var res = {
394
text : "",
395
contents : new Array()
396
};
397
398
var level = 0;
399
var buffer = "";
400
var tail = text;
401
var bracketSearchKey = "[" + startBracket + endBracket + "]";
402
403
while( tail.match( bracketSearchKey ) ) {
404
var bracket = RegExp.lastMatch;
405
var left = RegExp.leftContext;
406
tail = RegExp.rightContext;
407
408
409
if( level > 0 )
410
buffer += left;
411
else
412
res.text += left;
413
414
415
if( bracket == endBracket ) {
416
level --;
417
418
if( level == 0 ) {
419
var id = identifier.replace( "#", res.contents.length );
420
res.text += id;
421
res.contents.push( buffer );
422
buffer = "";
423
}
424
}
425
426
427
428
if( level > 0 )
429
buffer += bracket;
430
else if( ! swDelBracket )
431
res.text += bracket;
432
433
434
if( bracket == startBracket ) {
435
level ++;
436
}
437
}
438
res.text += tail;
439
440
return res;
441
}
442
443
444
function test() {
445
var b;
446
var c=b;
447
console.log( 1 );
448
if( a == (1+1)*2 || true ) {
449
b = 3;
450
if( false ) {}
451
} else {
452
b = 10;
453
}
454
mes = "スライムがあられた!";
455
for( var i = 0; i < mes.length; i++ ) {
456
console.log( mes.substr( i, 1 ) );
457
}
458
if( true ) console.log(3);
459
function abc( x, y ) {
460
console.log(4);
461
}
462
abc( 1, 2 );
463
}
464
function test2() {
465
console.log( 123 );
466
console.log( 1234 );
467
console.log(1);
468
}
469
470
</script>
471
<style>
472
</style>
473
</head>
474
<body onload="onloadx();" style="">
475
<pre>
476
下記の方法で JavaScript コンソールを開いてページ更新してください。
477
478
JavaScript コンソールを開くには:
479
たいていのブラウザは … CTRL+SHIFT+J を押す。
480
InternetExplorer の場合は … F12 を押してから CTRL+2 を押す。
481
482
<a href="javascript:location.reload();">ページ更新</a>
483
</pre>
484
</body>
485
</html>